spring手动开启事务,手动提交事务,手动回滚事务 您所在的位置:网站首页 springboot 处理scheduled 执行前添加业务 spring手动开启事务,手动提交事务,手动回滚事务

spring手动开启事务,手动提交事务,手动回滚事务

2023-09-05 17:36| 来源: 网络整理| 查看: 265

1.未加事务注解(或者事务配置), 所以需要手动开启事务和手动提交事务和手动回滚事务 @Autowired private PlatformTransactionManager txManager; @Autowired private ShopGroupBuyDao shopGroupBuyDao; @GetMapping(value = "/transactionDemo") public void ceshi() { // 手动开启事务 start DefaultTransactionDefinition def = new DefaultTransactionDefinition(); def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); TransactionStatus status = txManager.getTransaction(def); // 手动开启事务 end try { ShopGroupBuy shopGroupBuy = shopGroupBuyDao.selectOne(new LambdaQueryWrapper() .eq(ShopGroupBuy::getGroupBuyId, 505)); shopGroupBuy.setGroupBuyTheme("wulin11"); int i = shopGroupBuyDao.updateById(shopGroupBuy); int a = 1 / 0; // 手动提交事务 start txManager.commit(status); // 手动提交事务 end if (i > 0) { System.out.println("更新成功"); } else { System.out.println("更新失败"); } } catch(Exception e) { e.printStackTrace(); // 手动回滚事务 start txManager.rollback(status); // 手动回滚事务 end } }

 

 

 

 

2.加事务注解

这里演示加了事务注解(@Transactional(rollback=Exception.class)), 且在代码中也加了try catch相当于没有加事务注解, 所以事务不起作用, 此时就需要在catch里面手动添加事务的回滚,即这样:也可以参考博客:https://blog.csdn.net/qq_26106607/article/details/83827630

@Autowired private ShopGroupBuyDao shopGroupBuyDao; @GetMapping(value = "/transactionDemo") @Transactional(rollbackFor = Exception.class) public void ceshi() { try { ShopGroupBuy shopGroupBuy = shopGroupBuyDao.selectOne(new LambdaQueryWrapper() .eq(ShopGroupBuy::getGroupBuyId, 505)); shopGroupBuy.setGroupBuyTheme("wulin11"); int i = shopGroupBuyDao.updateById(shopGroupBuy); int a = 1 / 0; if (i > 0) { System.out.println("更新成功"); } else { System.out.println("更新失败"); } } catch(Exception e) { e.printStackTrace(); // 手动回滚事务 start TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); // 手动回滚事务 end } }

 

 

 

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有